from enum import Enum, auto, unique

# By default, enumerations allow multiple names as aliases for the same value.
# When this behavior isn’t desired, the following decorator can be used to
# ensure each value is used only once in the enumeration
@unique
class KeyCode(Enum):
    NONE = auto()
    ESCAPE = auto()
    BACKSPACE = auto()
    TAB = auto()
    ENTER = auto()
    SHIFT = auto()
    CONTROL = auto()
    ALT = auto()
    PAUSE = auto()
    PAGE_UP = auto()
    PAGE_DOWN = auto()
    END = auto()
    HOME = auto()
    UP = auto()
    LEFT = auto()
    RIGHT = auto()
    DOWN = auto()
    PRINT_SCREEN = auto()
    DELETE = auto()
    SPACE = auto()

    A = auto()
    B = auto()
    C = auto()
    D = auto()
    E = auto()
    F = auto()
    G = auto()
    H = auto()
    I = auto()
    J = auto()
    K = auto()
    L = auto()
    M = auto()
    N = auto()
    O = auto()
    P = auto()
    Q = auto()
    R = auto()
    S = auto()
    T = auto()
    W = auto()
    X = auto()
    Y = auto()
    Z = auto()

    K_0 = auto()
    K_1 = auto()
    K_2 = auto()
    K_3 = auto()
    K_4 = auto()
    K_5 = auto()
    K_6 = auto()
    K_7 = auto()
    K_8 = auto()
    K_9 = auto()

    KP_0 = auto()
    KP_1 = auto()
    KP_2 = auto()
    KP_3 = auto()
    KP_4 = auto()
    KP_5 = auto()
    KP_6 = auto()
    KP_7 = auto()
    KP_8 = auto()
    KP_9 = auto()

    KP_ADD = auto()
    KP_SUB = auto()
    KP_DIV = auto()
    KP_MUL = auto()
    KP_DEC = auto()
    KP_ENTER = auto()

    F1 = auto()
    F2 = auto()
    F3 = auto()
    F4 = auto()
    F5 = auto()
    F6 = auto()
    F7 = auto()
    F8 = auto()
    F9 = auto()
    F10 = auto()
    F11 = auto()
    F12 = auto()
